<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Paginado
 *
 * @author cshepherd
 */
class Paginado {
	private $lista;					//Array que guardar� el listado completo.
	private $reg_pagina;			//Registros a mostrar por p�gina.
	private $reg_total;				//Total de registros!
	private $reg_mostrar;			//Array con los registros que se deben mostrar.
	private $pagina_actual;			//N�mero de la p�gina actual.
	private $pagina_anterior;		//N�mero de la p�gina anterior.
	private $pagina_siguiente;		//N�mero de la p�gina siguiente.
	private $pagina_total;			//N�mero total de las p�ginas.
	private $ultima_pagina;			//N�mero total de las p�ginas.
	private $nro_pag_max;			//Numero maximo mostrado
	private $paginado_sql;			//Numero maximo mostrado
	private $class_paginado='container_page';	//Clase q da estilo a al pagina
	private $ruta = "../media/images/public/page/";////Ubicacion imagenes

	function Paginado ($lista, $reg_pagina='10', $nro_pag_max='10')
	{
		$this->nro_pag_max = $nro_pag_max;
		$this->reg_pagina = $reg_pagina;
		$this->pagina_actual = ($_GET['pagina']?$_GET['pagina']:'1');

		if(!is_array($lista)){
            //Obtenemos el array solo de la pagina actual.
			$this->reg_mostrar=$this->lista=$this->lista_registros($lista);
			$this->paginado_sql=true;
		}
		else{
			$this->lista = $lista;
			$this->reg_total = count($this->lista);

            //Obtenemos el array de resultados a mostrar.
            $registro_ini=(($this->pagina_actual-1)*$this->reg_pagina);
            $this->reg_mostrar = array_slice($this->lista,$registro_ini,$this->reg_pagina);
		}
		$this->conpaginar();
	}

	private function lista_registros($sql){

        $obj_sql=new Spdo();

		$sql_num=preg_replace('/^select[\W|\w]*from/','select count(*) as tot from',strtolower($sql));
		$tot_reg=$obj_sql->conn_array($sql_num);
		$this->reg_total=$tot_reg[0][tot];

		if(!strstr($sql,'LIMIT')){
			$registro_ini=(($this->pagina_actual-1)*$this->reg_pagina);
			echo $sql=$sql." LIMIT ".$registro_ini.",".$this->reg_pagina;
		}

        return $obj_sql->conn_array($sql);
    }

	private function conpaginar(){
		if (!empty($this->lista))
		{
			$this->pagina_total = ceil($this->reg_total / $this->reg_pagina);

			//Obtenemos la p�gina actual.
			if ($this->pagina_actual < 1)
			{
				$this->pagina_actual = 1;
			}
			if ($this->pagina_actual > $this->pagina_total)
			{
				$this->pagina_actual =$this->pagina_total;
			}

			//Obtenemos la p�gina siguiente.
			if ($this->pagina_actual < $this->pagina_total)
			{
				$this->pagina_siguiente = $this->pagina_actual + 1;
			}
			else
			{
				$this->pagina_siguiente = false;
			}

			//Obtenemos la p�gina anterior
			if ($this->pagina_actual > 1)
			{
				$this->pagina_anterior = $this->pagina_actual - 1;
			}
			else
			{
				$this->pagina_anterior = false;
			}

		}
	}


	public function contenido_pagina(){
       return $this->reg_mostrar;
	}

	public function navegacion ($pagina_actual='')
	{
		if(empty($pagina_actual)){
			if($_SERVER['QUERY_STRING']){
				$gets=explode('&pagina=',$_SERVER['QUERY_STRING']);
				$pagina_actual=$_SERVER['PHP_SELF'].'?'.$gets[0];
			}
			else{
				$pagina_actual=$_SERVER['PHP_SELF'].'?iso=0';
			}
		}


		if (!empty($this->lista))
		{
			$cadena = "";

			//Atras
			if ($this->pagina_anterior)
			{
				$cadena_atras = $this->primero($pagina_actual).$cadena_atras."<a  href='".$pagina_actual."&amp;pagina=".$this->pagina_anterior."' title='Previo'><img src='".$this->ruta."action_back.gif' border=\"0\" alt=\"Previo\" /></a> ";
			}
			else
			{
				$cadena_atras = $this->primero().$cadena_atras ." ". "<img src='".$this->ruta."action_back_off.gif' border=\"0\" alt=\"\"/> ";
			}


			///paguinas a ver
			//P�ginas
			$max=$this->nro_pag_max;
			if($this->pagina_total>$max){

				$vista=floor(($max-1)/2);//LOS LADOS

				$final=$this->pagina_actual+$vista;
				$inicio=$this->pagina_actual-$vista;
				if($inicio<1) $final=$final+(1-$inicio);
				if($final>$this->pagina_total) $inicio=$inicio-($final-$this->pagina_total);

				if($inicio>0)  $ini=$inicio;
				else $ini=1;

				if($final<$this->pagina_total) $fin=$final;
				else $fin=$this->pagina_total;

				for ($valor = $ini; $valor <= $fin; $valor++){
					if ($valor <> $this->pagina_actual)
					{
						$cadena_paginas = $cadena_paginas . "<a class='pagina' href='".$pagina_actual."&amp;pagina=".$valor."'> ".$valor."</a>  ";
					}
					else
					{
						$cadena_paginas = $cadena_paginas." ".$valor."  ";
					}
				}

				if($inicio>1)  $cadena_paginas="...".$cadena_paginas;
				if($final<$this->pagina_total) $cadena_paginas=$cadena_paginas."...";

			}else{
				for ($valor = 1; $valor <= $this->pagina_total; $valor++){
					if ($valor <> $this->pagina_actual)
					{
						$cadena_paginas = $cadena_paginas . "<a  class='pagina' href='".$pagina_actual."&amp;pagina=".$valor."'>".$valor."</a>  ";
					}
					else
					{
						$cadena_paginas = $cadena_paginas." ".$valor." ";
					}
				}
			}


			//Siguiente
			if ($this->pagina_siguiente)
			{
				$cadena_siguiente = $cadena_siguiente.
					"<a  href='".$pagina_actual."&amp;pagina=".$this->pagina_siguiente."' title='Siguiente'>
					<img src='".$this->ruta."action_forward.gif' border=\"0\" alt=\"Siguiente\"/></a>".
					$this->ultimo($pagina_actual);
			}
			else
			{
					$cadena_siguiente = $cadena_siguiente ." ". "<img src=\"".$this->ruta."action_forward_off.gif\" border=\"0\" alt=\"\"/>".$this->ultimo();
			}

			return "<div class='".$this->class_paginado."' >".
					$cadena_atras.$cadena_paginas.$cadena_siguiente."</div>";
		}
	}

	private function primero($pagina_actual=''){
		if ($pagina_actual){
            $pagina="<a href='".$pagina_actual."&amp;pagina=1' title='Primero'><img src='".$this->ruta."action_back_doble.gif' border=\"0\" alt=\"Primero\"/></a>&nbsp;";
        }
        else{
            $pagina="&nbsp;<img src='".$this->ruta."action_back_doble_off.gif' border=\"0\" alt=\"\"/>";
        }

		return $pagina;
	}

    private function ultimo($pagina_actual='') {

        if ($pagina_actual){
            $pagina="&nbsp;<a href='".$pagina_actual."&amp;pagina=".$this->pagina_total."' title='Ultimo'><img src='".$this->ruta."action_forward_doble.gif' border=\"0\" alt=\"\"/></a>";
        }
        else{
            $pagina="&nbsp;<img src='".$this->ruta."action_forward_doble_off.gif' border=\"0\" alt=\"\"/>";
        }

		return $pagina;
	}
}
?>
